/**
 * 
 */
package tk.sunlatus.project.usermanage.dao;

import java.util.Collection;
import java.util.List;

import tk.sunlatus.project.common.domain.Page;
import tk.sunlatus.project.common.domain.ProcessResult;
import tk.sunlatus.project.usermanage.domain.User;

/**
 * 持久化层
 * 
 * @author sunlotus
 * 
 */
public interface UserDao {

    /**
     * 方法描述：根据用户ID查询用户信息
     * 
     * @param userID
     *            用户ID
     * 
     * @return 用户信息
     */
    User queryByID(String userID);

    /**
     * 方法描述：添加用户
     * 
     * @param user
     * @return
     */
    boolean saveUser(User user);

    /**
     * 方法描述：批量导入用户
     * 
     * @param users
     * @return
     */
    ProcessResult batchSaveUser(User[] users);

    /**
     * 方法描述：批量导入用户
     * 
     * @param users
     * @return
     */
    ProcessResult batchSaveUser(Collection<User> users);

    /**
     * 方法描述：根据用户ID删除用户
     * 
     * @param userID
     * @return
     */
    boolean removeByID(String userID);

    /**
     * 方法描述：批量删除用户
     * 
     * @param userIDs
     * @return
     */
    ProcessResult batchRemoveUsers(String[] userIDs);

    /**
     * 方法描述：批量删除用户
     * 
     * @param userIDs
     * @return
     */
    ProcessResult batchRemoveUsers(Collection<String> userIDs);

    /**
     * 方法描述：注销用户
     * 
     * @param user
     *            用户信息
     * @return 操作结果
     */
    boolean deregistration(User user);

    /**
     * 方法描述：注销用户
     * 
     * @param users
     *            用户信息
     * @return 操作结果
     */
    ProcessResult deregistrationUsers(User[] users);

    /**
     * 方法描述：注销用户
     * 
     * @param users
     *            用户信息
     * @return 操作结果
     */
    ProcessResult deregistrationUsers(Collection<User> users);

    /**
     * 方法描述：查询用户列表
     * 
     * @param user
     *            查询条件
     * @param page
     *            分页信息
     * @return
     */
    List<User> queryUserList(User user, Page page);

    /**
     * 方法描述： 修改用户信息
     * 
     * @param user
     *            用户信息
     * @return 用户信息
     */
    User updateUser(User user);

    /**
     * 方法描述： 删除/注销用户
     * 
     * @param user
     *            用户信息
     * @param deleteFlag
     *            删除标志
     * @return
     */
    User deleteUser(User user, boolean deleteFlag);

}
